// 开发阶段的入口文件
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import './plugins/element.js'
// 引入全局样式文件
import './assets/css/global.css'
// 引入字体图标文件
import './assets/fonts/iconfont.css'
// 引入 axios 发送请求文件
import axios from 'axios'

// 导入第三方插件
import TreeTable from 'vue-table-with-tree-grid' // 树形表格插件
import VueQuillEditor from 'vue-quill-editor' // 富文本编辑器
import 'quill/dist/quill.core.css' // import styles
import 'quill/dist/quill.snow.css' // for snow theme
import 'quill/dist/quill.bubble.css' // for bubble theme
import Nprogress from 'nprogress' // 加载进度条
import 'nprogress/nprogress.css' // 导入 Nprogress 样式文件

// 配置请求根路径
axios.defaults.baseURL = 'http://127.0.0.1:8888/api/private/v1/'
// 添加一个请求拦截器，拦截所有的 axios 发送请求
axios.interceptors.request.use(
  config => {
    // 给每一个请求的请求头添加 Authorization 属性，值是一个 token
    config.headers.Authorization = window.sessionStorage.getItem('token')
    Nprogress.start() //显示进度条
    return config
  },
  error => {
    return Promise.reject(error)
  }
)
// 添加一个响应拦截器，拦截所有的 axios 响应请求
axios.interceptors.response.use(
  config => {
    Nprogress.done() //隐藏进度条
    return config
  },
  error => {
    return Promise.reject(error)
  }
)
// 把 axios 挂载到 Vue 的属性中，让每一个组件都能访问到 axios 对象
Vue.prototype.$http = axios

// 注册全局组件
Vue.component('tree-table', TreeTable) // 注册 树形表格 组件
Vue.use(VueQuillEditor) // 注册 富文本编辑器 组件

// 定义全局时间格式过滤器
Vue.filter('dateFormat', function(originVal, format) {
  if (typeof originVal === 'string') {
    var mts = originVal.match(/(\/Date\((\d+)\)\/)/)
    if (mts && mts.length >= 3) {
      originVal = parseInt(mts[2])
    }
  }
  originVal = new Date(originVal)
  if (!originVal || originVal.toUTCString() == 'Incalid Date') {
    return ''
  }

  var map = {
    M: originVal.getMonth() + 1, //月份
    d: originVal.getDate(), //日
    h: originVal.getHours(), //时
    m: originVal.getMinutes(), //分
    s: originVal.getSeconds(), //秒
    q: Math.floor((originVal.getMonth() + 3) / 3), //季度
    S: originVal.getMilliseconds() //毫秒
  }

  format = format.replace(/([yMdhmsqS])+/g, function(all, t) {
    var v = map[t]
    if (v != undefined) {
      if (all.length > 1) {
        v = '0' + v
        v = v.substr(v.length - 2)
      }
      return v
    } else if (t === 'y') {
      return (originVal.getFullYear() + '').substr(4 - all.length)
    }
    return all
  })
  return format
})

// 阻止启动生产消息
Vue.config.productionTip = false

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')
